package com.share.device.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.share.device.domain.Region;
import com.share.device.mapper.RegionMapper;
import com.share.device.service.IRegionService;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * @author YC
 */
@Service
public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {

    /**
     * 业务逻辑：
     * 数据库中没有hasChildren字段，在Bean中添加了hasChildren非数据库字段，
     * 查询子地区集合，子地区集合有数据则设置hasChildren=true，没有则设置hasChildren=false
     * 前端拿数据时显示子地区集合时，根据hasChildren字段判断当前地区是否还有下一层数据
     */
    @Override
    public List<Region> treeSelect(String parentCode) {
        // 根据父级地区编码查询子地区集合
        List<Region> regionList = baseMapper.selectList(
                new LambdaQueryWrapper<Region>()
                        .eq(Region::getParentCode, parentCode)
        );
        // 判断子地区集合是否有数据
        if (!CollectionUtils.isEmpty(regionList)) {
            for (Region region : regionList) {
                // 查询子地区集合中下的每个地区中是否还有下一层孙子集合（）
                Long count = baseMapper.selectCount(
                        new LambdaQueryWrapper<Region>()
                                .eq(Region::getParentCode, region.getCode())
                );
                // 如果有下一层数据，设置hasChildren=true
                region.setHasChildren(count > 0);
            }
        }
        return regionList;
    }

    @Override
    public String getNameByCode(String code) {
        if (StringUtils.isEmpty(code)) {
            return "";
        }
        Region region = baseMapper.selectOne(
                new LambdaQueryWrapper<Region>()
                        .eq(Region::getCode, code).select(Region::getName)
        );
        if (region != null) {
            return region.getName();
        }
        return "";
    }

}
